package org.skyer.third.gateway.api.dto;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;

/**
 * 订单回流业务结果
 */
@Getter
@Setter
@ToString
public class BackFlowResultDTO<T> implements Serializable {

    public static final String CAN_RETRY_ERROR_CODE = "error_code_retry";

    /**
     * 状态 0-失败 1-成功
     */
    private Integer status;
    /**
     * 错误码
     */
    private String errorCode;

    private String msg;
    /**
     * 为1的时候 data里面就是
     */
    private T data;

    public boolean isSuccess() {
        return status == 1;
    }

    /**
     * 成功
     *
     * @param data 平台返回的数据
     */
    public static BackFlowResultDTO<String> success(String data) {
        BackFlowResultDTO<String> backFlowResultDTO = new BackFlowResultDTO<>();
        backFlowResultDTO.setStatus(1);
        backFlowResultDTO.setErrorCode("操作成功");
        backFlowResultDTO.setData(data);
        return backFlowResultDTO;
    }

    /**
     * 平台返回失败
     *
     * @param errorCode 错误码
     * @param data      平台返回的数据
     */
    public static BackFlowResultDTO<String> plaformError(String errorCode, String data) {
        BackFlowResultDTO<String> backFlowResultDTO = new BackFlowResultDTO<>();
        backFlowResultDTO.setStatus(0);
        backFlowResultDTO.setErrorCode(errorCode);
        backFlowResultDTO.setData(data);
        return backFlowResultDTO;
    }

    /**
     * 本系统失败
     *
     * @param data 错误信息
     */
    public static BackFlowResultDTO<String> sysError(String data) {
        BackFlowResultDTO<String> backFlowResultDTO = new BackFlowResultDTO<>();
        backFlowResultDTO.setStatus(0);
        backFlowResultDTO.setErrorCode("sysError");
        backFlowResultDTO.setData(data);
        return backFlowResultDTO;
    }

    /**
     * 完成返回
     *
     * @param data 错误信息
     */
    public static <T> BackFlowResultDTO<T> complete(Integer code, T data, String msg) {
        BackFlowResultDTO<T> backFlowResultDTO = new BackFlowResultDTO<>();
        backFlowResultDTO.setStatus(code);
        backFlowResultDTO.setMsg(msg);
        backFlowResultDTO.setData(data);
        return backFlowResultDTO;
    }

}
